Programátor -> Vývojář -> Software Engineer
Obsah
Jak léta jdou, přemýšlím kontinuálně o cestě, kterou jsem urazil a kam směřuju. Jeden takový pohled na část takové cesty naznačuje titulek.
Dneska už jsem na té cestě dál — jsem v bodě, kdy už pár let “stavím” týmy. A byť nehledám lidi, kteří jsou mým odrazem — naopak, mám rád diverzitu a plánovaně, podvratně :-) ji aplikuju — podvědomě vybírám lidi, kteří na podobnou cestu aspirují a berou ji jako součást týmové kultury.
Téma je pro mě zajímavé — jak čistě myšlenkově, tak i prakticky. Pokud pracujete s týmy, tak kromě těch technických věcí, řešíte taky záležitosti jako rozvoj lidí, jejich vzrůstající finanční očekávání, ohodnocení jejich technické a jiné seniority atd.
Zároveň nebudu skrývat, že ne vždy se to podaří — přesvědčit, inspirovat lidi, že tohle je ta správná cesta. Občas vidíte potenciál, ale nepovede se vám dostat daného člověka z jeho bubliny. A někdy se prostě jen mýlíte a chybujete.
Korintským #
Asociace, která mi naskočila, když jsem začal o tématu přemýšlet, pochází, možná překvapivě, z Bible — Pavlova listu Korintským. Je to taková ta pasáž, co se čte vždycky na svatbách… ale nebojte, nebudu vás zahrnovat láskou ;-) mám na mysli jinou větu:
Dokud jsem byl dítě, mluvil jsem jako dítě, myslel jsem jako dítě, měl jsem dětské názory; když jsem však dospěl, s dětinskými věcmi jsem se rozloučil. — 1. Korintským 13:11
Co mně přijde podstatné na tomhle citátu, je ten přechod — opuštění určité formativní fáze a přechod do další. A i když s tím občas bývají problémy, nejde o odvrhnutí předešlé fáze, naopak, ta by měla být integrována.
(A jen pro jistotu, protože vím, jak jsou lidi chytlavý — výběrem citátu jsem nechtěl říct, že – obecně – třeba programátoři jsou dětinští. Jasně, že občas jsou, ale není to generalizace. Ale což, ať si každý odnese, co potřebuje.)
Model #
Jednoduchý model, který popisuje naše téma, vypadá jako tři soustředné kruhy. A tak jako cibule, krystal, či perla, rostou postupně schopnosti našeho hypotetického programátora.
Programátor #
Znáte termín code monkey? Je to většinou nelichotivý termín, i když občas se k němu někdo hrdě hlásí (většinou nápisem na tričku). Mě se líbí definice z Urban Dictionary, která dobře vystihuje, co si pod termínem programátor představuju já:
“A programmer who isn’t actually involved in any aspect of conceptual or design work, but simply writes code to specifications given.”
Programátor je pro mne člověk, který — s ohledem na svou senioritu — dobře rozumí úzce vymezené technické oblasti. Hranice je zpravidla definována daným programovacím jazykem a v dnešní době také stále více nějakým přidruženým frameworkem. Cokoliv za algoritmy, technickými aspekty jazyka a lokální kompilací (je-li potřeba), je mimo oblast zájmu a zodpovědnosti programátora — jeho práce končí komitem do verzovacího systému.
Taková úzce vymezená specializace nemusí být na škodu — záleží, jaká je vaše doména, role v týmu, rozsah projektu ad. Na druhou stranu, moderní softwarový vývoj vyžaduje daleko komplexnější spektrum schopností a mít v týmu “pouhého” programátora pak často znamená více zatížit ostatní členy týmu a přenést na ně část činností, jež u programátora “padají pod stůl”.
Vývojář #
Vývojář je už o úroveň dál. Že dobře rozumí svému programovacímu jazyku, je samozřejmost. Stejně tak dobře ovladá sadu souvisejících knihoven a frameworků, jež tvoří jeho technickou doménu.
Jako velmi volný příklad si představme mlhavý termín Backend Developer. Umí asi nějakou “business logiku”, řekněme v případě Javy někdo s CDI/EJB, nebo Spring+AOP+Transakce, plus nějakou tu persistenci, tudíž JPA/Hibernate/MyBatis/JDBC. A trošku té security.
Takže to je samozřejmost. Ale je to ještě něco navíc — větší, či menší povědomí, jak to spolu souvisí, nejen interně, ale i za hranice toho “backendu”. Plus troška “toho designu” a zase — jak na úrovni kódu, tak na úrovni komponent.
No a pak… pozvolné přibližování se k oblasti SW inženýrství: vědět něco o buildování, možná i nějaký ten release management, něco praxe a teorie testování (aspoň unit a functional), source code management, issue tracking, atd.
To hlavní, co odděluje vývojáře od programátora? Schopnost vidět v technické oblasti “big picture”.
Software Engineer #
A co SW inženýr? Ovšem, je to dobrý vývojář. Ale ovládá také většinu souvisejících oblastí, potřebných pro kvalitní a moderní vývoj softwaru:
- konzistentní release management
- efektivní, ale “čitelný” source code management
- issue tracking, který podporuje daný vývojový proces
- code quality management
- efektivní dokumentace (kódu, komponent, releasů, konfigurací atd.)
- continuous integration/deployment
- smysluplná a efektivní automatizace
Ale v první řadě — a to už je moje velmi subjektivní spekulace — rozumí byznisově tomu, proč daný úkol dělá a proč ho dělá daným způsobem (což je, vzhledem k mé zkušenosti, velmi, velmi vzácné). Přece jenom, je to inženýr a jeho prvotním úkolem je řešit problémy. Reálné problémy.
Jediná cesta? #
Na internetu a v knihách se vedou dlouhé diskuze, co je a co není SW inženýrství, ba, jestli vůbec něco jako SW inženýrství existuje. Moje zkušenost je, že na každém projektu je potřeba vždy a znova vybudovat terminologii. Význam a kontext konkrétního termínu se neustále proměňuje a podstatné je, abyste si s kolegy v týmu rozuměli.
Pro mne je software inženýr období a stav, kam jsem se dostal po téměř 20 letech programování. Šel jsem po výše naznačené cestě. Ta vaše bude zcela určitě jiná. O cestě, co jste urazili můžete vyprávět, ale zkušenosti jsou jenom vaše.
Je to realistické? #
Samozřejmě, život není o zjednodušujících modelech a ideálních okolnostech. Skutečný svět je špinavý, divoký a ne-soustředný. V realitě tak vidíme spoustu prolínání vyše řečených rolí, jež se častokrát mění v čase i v rámci krátkého období, jako je třeba iterace, nebo projekt. A pak, existuje spoustu odlišností, jež nejsou výjimkami, ale spíše úplně jinými koncepty a přístupy. Diverzita života se mi vždycky líbila.